﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using NHibernate;
using NHibernate.Cfg;

namespace asscope.core
{
    /// <summary>
    /// Helper นี้เหมาะสำหรับ basic client application (ไม่เหมาะกับ web app)
    /// </summary>
    public static class NHibernateHelper
    {
        // กำหนดตัวแปร factory ไว้เป็น static เมื่อสร้างขึ้นใช้งานใน App ไม่ต้องสร้างใหม่ทุกครั้งเนื่องจาก จะใช้เวลาในการสร้างนานมาก
        private static readonly ISessionFactory sessionFactory;
        // สร้าง Session 
        private static ISession currentSession;

        static NHibernateHelper()
        {
            // ทำการสร้าง factory 
            sessionFactory = new Configuration().Configure().BuildSessionFactory();
        }

        // เปิด session เพื่อทำงานกับ DB
        public static ISession GetCurrentSession()
        {
            if (currentSession == null)
            {
                // เปิด session ใหม่
                currentSession = sessionFactory.OpenSession();
            }
            return currentSession;
        }

        // ทำการปิด session คล้ายการปิด db connection
        public static void CloseSession()
        {
            if (sessionFactory == null)
            {
                return;
            }
            currentSession.Close();
        }

        // ปิด factory ยกเลิกการใช้งาน
        public static void CloseSessionFactory()
        {
            if (sessionFactory != null)
            {
                sessionFactory.Close();
            }
        }
    }

}
